<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <!--
        <link type="text/css" rel="stylesheet" href="SyntaxHighlighter/Styles/SyntaxHighlighter.css"></link>
        <script language="javascript" src="SyntaxHighlighter/Scripts/shCore.js"></script>
        <script language="javascript" src="SyntaxHighlighter/Scripts/shBrushCSharp.js"></script>
        <script language="javascript" src="SyntaxHighlighter/Scripts/shBrushXml.js"></script>
        <script language="javascript">
        dp.SyntaxHighlighter.ClipboardSwf = 'SyntaxHighlighter/Scripts/clipboard.swf';
        dp.SyntaxHighlighter.HighlightAll('code');
        </script>
        -->
    </head>
    <body>
        <form action="index.php" method="post" name="formularios">
            <table>
                <tr>
                    <td>Ruta .java</td><td><input type="text" name="ruta" id="ruta" value="E:\Desarrollos\Delphos\Delphos\src\java\formularios" size="50"/>
                        Nombre  .java<input type="text" name="nombreArchivo" id="nombreArchivo" value="<?php echo $_POST['nombreArchivo'] ?>" />
                    </td>
                </tr>
            </table>
            <br />
            <table>
                <tr>
                    <td>Formularios</td><td><select name="cantFormularios" id="cantFormularios" onchange="formularios.submit()" ><?php echo generarValues($_POST['cantFormularios']) ?></select></td>
                </tr>                
            </table>
            <br />
            <?php
            if (isset($_POST['cantFormularios'])) {
                generarFormularios($_POST['cantFormularios']);
            } else {
                generarFormularios();
            }
            ?>



        </form>
        <pre name="code" class="java">
            
        </pre>
        <?php
        if (isset($_POST['Generar'])) {
            $cantidad = $_POST['cantFormularios'];
            generarClass($_POST['nombreArchivo']);
            // Declaraciones...
            generarProcessRequest();
            $codigo = '';
            // declaraciones
            echo 'sel = fun.map(dkda.o(vars, "codigo").toString());';
            for ($n = 1; $n <= $cantidad; $n++) {
                if (empty($_POST['tabla_' . $n])) {
                    continue;
                }
                $campos = ( $_POST['campos_' . $n] == '' ? cortar(obtenerCamposTabla($_POST['tabla_' . $n])) : cortar($_POST['campos_' . $n]) );
                $relaciones = obtenerRelaciones($_POST['tabla_' . $n]);
                declaraciones($campos, $_POST['tabla_' . $n], empty($_POST['fijo_' . $n]) ? $_POST['tabla_' . $n] : $_POST['fijo_' . $n], $relaciones[1]);
            }
            /*
            echo '<br />-------------<br />';
            print_r( $relaciones[ 0 ] );
            echo '<br />-------------<br />';
             * 
             */
            // Condiciones...
            for ($n = 1; $n <= $cantidad; $n++) {
                if (empty($_POST['tabla_' . $n])) {
                    continue;
                }
                //$relaciones = obtenerRelaciones($_POST['tabla_' . $n]);
                $codigo .= generarOpciones($_POST['cantFormularios'], $_POST['tabla_' . $n]);
            }


            generarProcessRequest2(( $cantidad > 1 ? '<br />String opcion = dkda.o(vars, "accion").toString();
        String pestana = dkda.o(vars, "pestana").toString(); respuesta = "";<br /> <br />' : '' ) . $codigo . (( $cantidad > 1 ) ? 'if (respuesta.length() > 0) {
          out.println(respuesta);
          }' : ''));


            for ($n = 1; $n <= $cantidad; $n++) {
                if (empty($_POST['tabla_' . $n])) {
                    continue;
                }

                crear($_POST['tabla_' . $n], $_POST['fijo_' . $n], $_POST['campos_' . $n]);
            }
            generarRestoClase();
        }

        function generarOpciones($cantFormularios = 1, $tabla = '') {
            if ($cantFormularios == 1) {
                $codigo = 'String opcion = dkda.o(vars, "accion").toString();
            respuesta = "";
            String respuesta = validarFormulario_' . $tabla . '();
            if (respuesta.length() > 0 && (opcion.equals("Registrar") || opcion.equals("Actualizar"))) {
                out.println(respuesta);
            } else {
                System.out.println("OPCION : " + opcion);
                if (opcion.equals("Registrar")) {
                    out.println(registrar_' . $tabla . '(con));
                }
                if (opcion.equals("Obtener")) {
                    out.println(obtener_' . $tabla . '(con, dkda.o(vars, "codigo").toString()));
                }
                if (opcion.equals("Actualizar")) {
                    out.println(actualizar_' . $tabla . '(con,  dkda.o(vars, "codigo").toString()));
                }
                if (opcion.equals("Eliminar")) {
                    out.println(eliminar_' . $tabla . '(con, dkda.o(vars, "codigo").toString() ));
                }
            }';
            } else {
                $codigo = '
                    
if (pestana.equals("' . $tabla . '") && (opcion.equals("Registrar") || opcion.equals("Actualizar"))) {
          respuesta = validarFormulario_' . $tabla . '();
          }
          if (opcion.equals("Registrar") && pestana.equals("' . $tabla . '") && respuesta.length() == 0) {
          out.println(registrar_' . $tabla . '(con));
          }
            if (opcion.equals("Actualizar") && pestana.equals("' . $tabla . '") && respuesta.length() == 0) {
                out.println(actualizar_' . $tabla . '(con, dkda.o(vars, "codigo").toString() ));
            }
            if (opcion.equals("Eliminar") && pestana.equals("' . $tabla . '") && respuesta.length() == 0) {
                out.println(eliminar_' . $tabla . '(con, dkda.o(vars, "codigo").toString() ));
            }            
            if (opcion.equals("Obtener") && pestana.equals("' . $tabla . '") && respuesta.length() == 0) {
                out.println(obtener_' . $tabla . '(con, dkda.o(vars, "codigo").toString() ));
            }          
';
            }
            return $codigo;
        }

        function generarClass($nombreArchivo = 'NombreClase') {
            echo 'package formularios;

            import java.io.IOException;
            import java.io.PrintWriter;
            import java.util.HashMap;
            import javax.servlet.ServletException;
            import javax.servlet.http.HttpServlet;
            import javax.servlet.http.HttpServletRequest;
            import javax.servlet.http.HttpServletResponse;
            import clases.ConexionBaseDatos;
            import clases.UtilidadesDKDA;
            import clases.bdS;
            import clases.ed_ValidacionCampos;
            import clases.estadosSQL;
            import java.sql.*;
            import java.net.URLDecoder;

            public class ' . $nombreArchivo . ' extends HttpServlet {

                ConexionBaseDatos con;
                HashMap vars = new HashMap();
                String respuesta = "";
                funciones fun = new funciones();
                UtilidadesDKDA dkda = new UtilidadesDKDA();
                HttpServletRequest request;
                private String string;
                ed_ValidacionCampos v = null;';
        }

        function crear($tabla = '', $fijo = '', $campos = '') {
            $campos = ( $campos == '' ? cortar(obtenerCamposTabla($tabla)) : cortar($campos) );

            $fijo = empty($fijo) ? $tabla : $fijo;

            if (existenRelacion($tabla)) {
                $relaciones = obtenerRelaciones($tabla);


                generarInsertar($campos, $tabla, $fijo, $relaciones[1]);
                generarUpdate($campos, $tabla, $fijo, $relaciones[1]);
                generarDelete($tabla);
                generarObtener($campos, $tabla);
                validarFormulario($tabla);
            } else {
                generarInsertar($campos, $tabla, $fijo);
                generarUpdate($campos, $tabla, $fijo);
                generarDelete($tabla);
                generarObtener($campos, $tabla);
                validarFormulario($tabla);
            }
        }

        function generarProcessRequest() {
            echo 'protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String parametros = new String(URLDecoder.decode(request.getParameter("parametros")).getBytes(), "UTF-8");
        vars = clases.UtilidadesDKDA.urlDecodificar(parametros, "");



        con = new ConexionBaseDatos();
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        this.request = request;
        v = new clases.ed_ValidacionCampos();';
        }

        function generarProcessRequest2($codigo) {


            echo '
                try {
                ' . $codigo . '

} finally {
            out.close();
        }

   } ';
        }

        function generarRestoClase() {
            echo '// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."><br />
     <br />
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
     <br />
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
<br />
    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
     <br />
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
<br />
    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
     <br />
    @Override
    public String getServletInfo() {
        return "Short description";
    }<br />// </editor-fold><br />';
            echo '<br />}';
        }

        function generarFormularios($cantidad = 1) {
            for ($n = 1; $n <= $cantidad; $n++) {
                echo '<table>';
                echo '
                <tr>
                    <td>Tabla</td><td><input type="text" name="tabla_' . $n . '" id="tabla_' . $n . '" value="' . $_POST['tabla_' . $n] . '" /></td>
                </tr>
                <tr>
                    <td>Su fijo</td><td><input type="text" name="fijo_' . $n . '" id="fijo_' . $n . '" value="' . $_POST['fijo_' . $n] . '" />Tomará el nombre de la tabla si este es vacio</td>
                </tr>
                <tr>
                    <td>Campos</td><td><textarea name="campos_' . $n . '" cols="80" rows="4">' . $_POST['campos_' . $n] . '</textarea>Tomará los campos automaticamente si este campo esta vacio
                    </td>
                </tr>';
                echo '</table><br /><br />';
            }
            echo '<table><tr><td></td><td><input type="submit" name="Generar" value="Generar" /></td></tr></table>';
        }

        function validarFormulario($tabla = '') {
            echo '<br /> <br /> public String validarFormulario_' . $tabla . '() {
        String direccion = "opcion=registrar_' . $tabla . '&&estado=no&&error=si&&errorDes=";
        String error = "";
        respuesta = (error.length() > 1 ? direccion + "<strong>" + error + "</strong>" : "");
        return respuesta; }';
        }

        function generarValues($seleccion = '') {

            $value = '';
            for ($n = 1; $n <= 10; $n++) {
                $values .= '<option value=' . $n . ' ' . ( $seleccion == $n ? 'selected' : '' ) . '>' . $n . '</option>';
            }
            return $values;
        }

        function buscarRelRepetidas($repetidas = '', $tabla = '') {
            $n = 0;
            foreach ($repetidas as $clave => $rel) {
                if (count($rel) > 1) {
                    echo '<br />' . $tabla . '<br />';
                    echo '<select name=\"repetida_' . $n . '\">';
                    foreach ($rel as $index => $campos) {
                        $tabla_pos = array_keys($campos);
                        $columna = obtenerCampoTabla($tabla_pos[0], $campos[$tabla_pos[0]]);
                        echo '<option value=\"' . $tabla_pos[0] . '-' . $columna['columna'] . '-' . $campos[$tabla_pos[0]] . '\">' . $tabla_pos[0] . '-' . $columna['columna'] . '</option>';
                    }

                    echo '</select>';
                    $n++;
                }
            }
        }

        function obtenerRelaciones($tabla) {
            $relaciones = array();
            $queryTabla = pg_query(conectarPostgres(), "select (select relname from pg_class where oid =  confrelid) as \"tabla\" ,
                conkey AS \"columnas_propias\", confkey AS \"columnas_relacion\" from pg_class r,
                pg_constraint c where r.oid = c.conrelid AND relname = '" . $tabla . "' AND contype = 'f'");
            echo '<br /> <br />';

            $relRepetidas = array();
            while ($fila = pg_fetch_assoc($queryTabla)) {

                $tabla_relacion = $fila['tabla'];
                $columnas_propias = preg_split('/,/', str_replace(array('{', '}'), '', $fila['columnas_propias']));
                $columnas_relacion = preg_split('/,/', str_replace(array('{', '}'), '', $fila['columnas_relacion']));
                for ($l = 0; $l < count($columnas_relacion); $l++) {
                    $campos_propios = obtenerCampoTabla($tabla, $columnas_propias[$l]);
                    $campos_relacion = obtenerCampoTabla($tabla_relacion, $columnas_relacion[$l]);


                    $columna_pro = obtenerCampoTabla($tabla, $columnas_propias[$l]);
                    $columna_rel = obtenerCampoTabla($tabla_relacion, $columnas_relacion[$l]);
                    $relRepetidas[$columna_pro['columna']][][$tabla_relacion] = $columna_rel['columna'];

                    $relaciones[$tabla_relacion][] = array(
                        0 => array($tabla, $campos_propios['columna'], $campos_propios['posicion']),
                        1 => array($tabla_relacion, $campos_relacion['columna'], $campos_relacion['posicion']));
                }
            }
            // Buscar repetidos...


            return array($relaciones, $relRepetidas);
        }

        function existenRelacion($tabla) {
            $queryTabla = pg_query(conectarPostgres(), "select COUNT(*) from pg_class r, pg_constraint c where r.oid = c.conrelid AND contype = 'f' AND relname = '" . $tabla . "' ");
            if (pg_num_rows($queryTabla) > 0) {
                return true;
            }
            return false;
        }

        function obtenerPrimariKeys($tabla = '') {
            $queryTabla = pg_query(conectarPostgres(), "select (select relname from pg_class where oid =  confrelid) as \"tabla\" ,
                conkey AS \"columnas_propias\", confkey AS \"columnas_relacion\" from pg_class r,
                pg_constraint c where r.oid = c.conrelid AND relname = '" . $tabla . "' AND contype = 'p'");


            $fila = pg_fetch_assoc($queryTabla);
            $columnas = preg_split('/,/', str_replace(array('{', '}'), '', $fila['columnas_propias']));
            return $columnas;
        }

        function obtenerCamposTabla($tabla = '') {
            $queryTabla = pg_query(conectarPostgres(), "SELECT column_name FROM information_schema.columns WHERE table_name = '" . $tabla . "'");
            while ($fila = pg_fetch_assoc($queryTabla)) {
                $campos[] = $fila['column_name'];
            }
            return implode(',', $campos);
        }

        function cantidadRelaciones($tabla = '') {
            $queryTabla = pg_query(conectarPostgres(), "select (select relname from pg_class where oid =  confrelid) as \"tabla\" ,
                conkey AS \"columnas_propias\", confkey AS \"columnas_relacion\" from pg_class r,
                pg_constraint c where r.oid = c.conrelid AND relname = '" . $tabla . "' AND contype = 'p'");


            $fila = pg_fetch_assoc($queryTabla);
            $columnas_propias = preg_split('/,/', str_replace(array('{', '}'), '', $fila['columnas_propias']));
            return count($columnas_propias);
        }

        function declaraciones($campos = '', $tabla = '', $fijo = '', $relaciones = '') {
            $camposTipo = camposTipo($tabla);

            $HashMap = 'HashMap sel,';
            $hash = array();
            $decla = "";
            
            foreach ($campos as $c => $v) {
                if (key_exists($v, $relaciones)) {
                    $arreglo = $relaciones[$v][0];
                    $tabla = array_keys($arreglo);
                    $tabla = $tabla[0];
                    if (cantidadRelaciones($tabla) > 1) {
                        $campo = $arreglo[$tabla];
                        if (!in_array($tabla . '_' . $fijo . '_1'  , $hash)) {
                            $hash[] = $tabla . '_' . $fijo . '_1';

                            $decla .= $tabla . '_' . $fijo . '_1'.'= fun.map(dkda.o(vars, "' . $tabla . '_' . $fijo . '_1'. '").toString());<br /> ';
                        }
                    }
                }
            }
            echo $HashMap . implode(',', $hash) . ';<br /> <br />';
            echo $decla;
        }
        
        function generarObtener($campos = '', $tabla = '') {
            echo '<br /> <br />    public String obtener_' . $tabla . '(ConexionBaseDatos con, String codigo) {
        con.abrirConexion();
        String info = "";
        try {
            ResultSet rs = null;
            PreparedStatement stmt = null;
            String sql = "";
            stmt = con.con.prepareStatement(sql);
            rs = stmt.executeQuery();
            rs.next();
            respuesta = "opcion=obtener_' . $tabla . '&&estado=si&&error=no&&errorDes=no&&codigo=" + codigo + "&&info=" + info.replace("\"", "");

        } catch (SQLException e) {
            respuesta = "opcion=obtener_' . $tabla . '&&estado=no&&error=si&&errorDes=" + dkda.convertirACarEspecial(e.getMessage());
            System.out.println("Error ' . $tabla . ' - Obtener.java: " + e.getMessage());
        }
        System.out.println(respuesta);
        return respuesta;

    }';
        }

        function generarInsertar($campos = '', $tabla = '', $fijo = '', $relaciones = '') {
            $tablaOriginal = $tabla;
            $values = "";
            $camposTipo = camposTipo($tabla);

            $HashMap = 'HashMap sel,';
            //$hash = array();
            $decla = "";

            $tablaExiste = array();
            foreach ($campos as $c => $v) {

                if (key_exists($v, $relaciones)) {
                    $arreglo = $relaciones[$v][0];
                    $tabla = array_keys($arreglo);
                    $tabla = $tabla[0];

                    if (cantidadRelaciones($tabla) > 1) {
                        $campo = $arreglo[$tabla];
                        //$cantidadRelaciones = relacionNumero($tablaOriginal, $tabla, $v, $cantidadRelaciones);
                        $dato = arreglarRelaciones($campo, tipoCampo($tabla, $campo), $tabla, $tablaOriginal, $dato[1]);
                        $values .= $dato[ 0 ];
                    } else {
                        $values .= arreglarCampo($v, $camposTipo[trim($v)], $fijo);
                    }
                } else {
                    $values .= arreglarCampo($v, $camposTipo[trim($v)], $fijo);
                }
            }


            $values = '(' . substr($values, 0, strlen($values) - 1) . ')';

            $insert_into = "";
            foreach ($campos as $c => $v) {
                $insert_into .= $v . ',';
            }
            $insert_into = '(' . substr($insert_into, 0, strlen($insert_into) - 1) . ') VALUES ';
            //echo '<br /> <br /><strong>Insertar...</strong><br /><br />';
            $sql = 'String sql = " INSERT INTO ' . $tablaOriginal . ' ' . $insert_into . $values . '";<br /> <br /> <br />';
            echo 'public String registrar_' . $tablaOriginal . '(ConexionBaseDatos con){
               System.out.println("registrar_' . $tablaOriginal . '");
        con.abrirConexion();
        
        try {
            ResultSet rs = null;
            PreparedStatement stmt = null;
            ' . $sql . '
            System.out.println( sql );

            stmt = con.con.prepareStatement(sql);
            stmt.execute();
            respuesta = "opcion=registrar_' . $tablaOriginal . '&&estado=si&&error=no&&errorDes=no";

        } catch (SQLException e) {
            respuesta = "opcion=registrar_' . $tablaOriginal . '&&estado=no&&error=si&&errorDes=" + estadosSQL.getM(e.getSQLState(), e.getMessage());
            System.out.println("Error ' . $tablaOriginal . '.java: " + estadosSQL.getM(e.getSQLState(), e.getMessage()));
        }

        con.cerrarConexion();
        return respuesta; 
            }';
        }
/*
        // Asigna el identificador _1 _2 dependiendo de la cantidad de relaciones de una tabla hacia otra
        // Ejemplo inscripcion  -> empresa , aparecen 4 relaciones hacia empresa.
        function relacionNumero($tablaOrginal = '', $tabla, $campo = '', $cantRelaciones = array()) {
            $queryTabla = pg_query(conectarPostgres(), "select (select relname from pg_class where oid =  confrelid) as \"tabla\" ,
                conkey AS \"columnas_propias\", confkey AS \"columnas_relacion\" from pg_class r,
                pg_constraint c where r.oid = c.conrelid AND relname = '" . $tablaOrginal . "' AND contype = 'f'");

            while ($fila = pg_fetch_assoc($queryTabla)) {
                $tabla_relacion = $fila['tabla'];
                if ($tabla_relacion != $tabla) {
                    continue;
                }
                $columnas_relacion = preg_split('/,/', str_replace(array('{', '}'), '', $fila['columnas_relacion']));
                for ($l = 0; $l < count($columnas_relacion); $l++) {
                    $campos_propios = obtenerCampoTabla($tabla, $columnas_relacion[$l]);
                    echo $columnas_relacion[$l] . ' : ';
                    //echo $campos_propios['columna'] . ' <br />';
                    //echo $tabla . ' <br />';
                    if ($campos_propios['columna'] == $campo) {
                        //echo $campo . ' <br />';
                        $cantRelaciones[$tabla . '_' . $columnas_relacion[$l]] += 1;
                    }
                }
            }
            //print_r( $cantRelaciones );
            echo '<br /><br />';
            return $cantRelaciones;
        }
*/
        function arreglarRelaciones($campo = '', $tipoCampo = '', $fijo = '', $tablaOriginal = '', $veces = array()) {
            $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] += 1;
            

            if (trim($campo) == 'ususiscodigo') {
                $value = '"+ "\'"+ fun.usuarioAutenticado(request) +"\'" +",';
                return $value;
            }
            if (trim($campo) == 'fecharegistro') {
                $value = '"+ "NOW()::date" +",';
                return $value;
            }

            if ($tipoCampo == 'character varying') {
                //$value = '\'" + dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '") + "\',';
                $value = '" + ( dkda.o(' . $fijo . '_' . $tablaOriginal . '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] . ', "' . trim($campo) . '").equals("") ? null : "\'" +  dkda.o(' . $fijo . '_' . $tablaOriginal . '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ]. ', "' . trim($campo) . '") + "\'"   ) + ",';
            } else if ($tipoCampo == 'numeric' || $tipoCampo == 'integer') {

                $value = '" + ( dkda.o(' . $fijo . '_' . $tablaOriginal. '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] . ', "' . trim($campo) . '").equals("") ? null :   dkda.o(' . $fijo . '_' . $tablaOriginal. '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] . ', "' . trim($campo) . '")   ) + ",';
            } else if ($tipoCampo == 'oid') {
                $value = '" + ( dkda.o(' . $fijo . '_' . $tablaOriginal . '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ]. ', "' . trim($campo) . '").equals("") ? null :  "lo_import(\'"+ fun.temp(request) + dkda.o(' . $fijo . ', "' . trim($campo) . '")  +"\')"   ) + ",';
            } else {
                $value = '" + ( dkda.o(' . $fijo . '_' . $tablaOriginal. '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] . ', "' . trim($campo) . '").equals("") ? null : "\'" +  dkda.o(' . $fijo . '_' . $tablaOriginal. '_' . $veces[ $fijo . '_' . $tablaOriginal . '_' .trim($campo) ] . ', "' . trim($campo) . '") + "\'"   ) + ",';
            }

            //return $value;
            return array( $value, $veces );
        }

        function obtenerCampoTabla($tabla = '', $pos = '') {
            // ;

            $queryTabla = pg_query(conectarPostgres(), "SELECT column_name as columna, ordinal_position as posicion
                FROM information_schema.columns WHERE table_name = '" . $tabla . "' AND ordinal_position = " . $pos);
            $fila = pg_fetch_assoc($queryTabla);
            return $fila;
        }

        function generarUpdate($campos = '', $tabla = '', $fijo = '', $relaciones = '') {
            $tablaOriginal = $tabla;
            echo '<br /><br />';

            $update = "";
            $camposTipo = camposTipo($tabla);
            foreach ($campos as $c => $v) {

                if (key_exists($v, $relaciones)) {
                    $arreglo = $relaciones[$v][0];
                    $tabla = array_keys($arreglo);
                    $tabla = $tabla[0];
                    
                    if (cantidadRelaciones($tabla) > 1) {
                        $campo = $arreglo[$tabla];
                        $dato = arreglarRelaciones($campo, tipoCampo($tabla, $campo), $tabla, $tablaOriginal, $dato[ 1 ]);
                        $update .= $v . ' = ' . $dato[ 0 ];
                    } else {
                        $update .= $v . ' = ' . arreglarCampo($v, $camposTipo[trim($v)], $fijo);
                    }
                } else {
                    $update .= $v . ' = ' . arreglarCampo($v, $camposTipo[trim($v)], $fijo);
                }
            }
            $sql = 'String sql = "UPDATE ' . $tablaOriginal . ' SET  ' . substr($update, 0, strlen($update) - 1) . ' WHERE ' . generarWhereUpdate($tablaOriginal, '') . ' ";';

            echo '    public String actualizar_' . $tablaOriginal . '(ConexionBaseDatos con, String codigo) {
        con.abrirConexion();

        try {
            ResultSet rs = null;
            PreparedStatement stmt = null;


            ' . $sql . '
            System.out.println( sql ); 

            stmt = con.con.prepareStatement(sql);
            stmt.executeUpdate();
            respuesta = "opcion=actualizar_' . $tablaOriginal . '&&estado=si&&error=no&&errorDes=no&&codigo=4";

        } catch (SQLException e) {
            respuesta = "opcion=actualizar_' . $tablaOriginal . '&&estado=no&&error=si&&errorDes=" + estadosSQL.getM(e.getSQLState(), e.getMessage());
            System.out.println("Error ' . $tablaOriginal . '.java: " + estadosSQL.getM(e.getSQLState(), e.getMessage()));
        }
        con.cerrarConexion();
        return respuesta;



    }';
        }

        function generarDelete($tabla = '') {

            echo '<br /> <br />     public String eliminar_' . $tabla . '(ConexionBaseDatos con, String codigo) {
   
        System.out.println("Eliminar entra" + codigo);
        con.abrirConexion();
        String[] codigos = codigo.split(",");
        String nuevosCodigos = "";
        for (int n = 0; n < codigos.length; n++) {
            nuevosCodigos += "\'" + codigos[n] + "\',";
        }
        try {
            ResultSet rs = null;
            PreparedStatement stmt = null;

            stmt = con.con.prepareStatement("DELETE FROM ' . $tabla . ' WHERE ' . generarWhereUpdate($tabla, 'delete') . '");
            stmt.execute();
            respuesta = "opcion=eliminar_' . $tabla . '&&estado=si&&error=no&&errorDes=no";

        } catch (SQLException e) {
            respuesta = "opcion=eliminar_' . $tabla . '&&estado=no&&error=si&&errorDes=" + e.getMessage();
            System.out.println("Error ' . $tabla . '.java: " + e.getMessage());
        }
        con.cerrarConexion();
        return respuesta;
    } ';
        }

        function generarWhereUpdate($tabla = '', $tipo = '') {
            $tipo = $tipo == 'delete' ? 'dkda.o(vars, "codigo").substring(0, dkda.o(vars, "codigo").length() - 1 )' : 'dkda.o(vars, "codigo")';
            $where = '';
            $pos = obtenerPrimariKeys($tabla);
            foreach ($pos as $clave => $valor) {
                $dato = obtenerCampoTabla($tabla, $valor);
                $tipoCampo = tipoCampo($tabla, $dato['columna']);
                $c = ( $tipoCampo == 'numeric' ? '' : "'" );

                if (cantidadRelaciones($tabla) > 1) {
                    $where .= $dato['columna'] . ' = ' . $c . '"+ dkda.o(sel, "' . $dato['columna'] . '") +"' . $c . ' AND ';
                } else {
                    $where .= $dato['columna'] . ' = ' . $c . '"+ '. $tipo .' +"' . $c . '';
                }
            }
            if (cantidadRelaciones($tabla) > 1) {
                return substr($where, 0, strlen($where) - 4);
            } else {
                return $where;
            }
        }

        function cortar($campos = '') {
            if (!empty($campos)) {

                $campos = explode(",", $campos);
                return $campos;
            } else {
                echo 'No hay campos, por favor inserte campos...';
            }
        }

        function tipoCampo($tabla = '', $campo = '') {
            $queryTabla = pg_query(conectarPostgres(), "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '" . $tabla . "' AND  column_name = '" . $campo . "'");
            $fila = pg_fetch_assoc($queryTabla);

            return $fila['data_type'];
        }

        function camposTipo($tabla) {


            $queryTabla = pg_query(conectarPostgres(), "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '" . $tabla . "'");
            while ($fila = pg_fetch_assoc($queryTabla)) {
                $camposTipo[$fila['column_name']] = $fila['data_type'];
            }
            return $camposTipo;
        }

        function arreglarCampo($campo = '', $tipoCampo = '', $fijo) {
            if (trim($campo) == 'ususiscodigo') {
                $value = '"+ "\'"+ fun.usuarioAutenticado(request) +"\'" +",';
                return $value;
            }
            if (trim($campo) == 'fecharegistro') {
                $value = '"+ "NOW()::date" +",';
                return $value;
            }

            if ($tipoCampo == 'character varying') {
                $campoCorte =  preg_split('/_/', trim( $campo ));
                
                $campo = $campoCorte[ 1 ] == 'nombre' ? $campoCorte[ 0 ] : trim( $campo ) ;
                
                //$value = '\'" + dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '") + "\',';
                $value = '" + ( dkda.o(vars, "' . $campo . '_' . trim($fijo) . '").equals("") ? null : "\'" +  dkda.o(vars, "' . $campo . '_' . trim($fijo) . '") + "\'"   ) + ",';
            } else if ($tipoCampo == 'numeric' || $tipoCampo == 'integer') {

                $value = '" + ( dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '").equals("") ? null :   dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '")   ) + ",';
            } else if ($tipoCampo == 'oid') {
                $value = '" + ( dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '").equals("") ? null :  "lo_import(\'"+ fun.temp(request) + dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '")  +"\')"   ) + ",';
            } else {
                $value = '" + ( dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '").equals("") ? null : "\'" +  dkda.o(vars, "' . trim($campo) . '_' . trim($fijo) . '") + "\'"   ) + ",';
            }

            return $value;
        }

        function conectarPostgres() {
            return pg_connect("host=localhost port=5432 dbname=delphos user=postgres password=armen1a@d3lph052011");
        }

        function encabezado() {
            
        }
        ?>




    </body>
</html>
